草庐IT

LeetCode - 两数之和

全部标签

LeetCode刷题第一周

数组:内存空间连续,数据类型统一,下标从0开始二分查找704classSolution{publicintsearch(int[]nums,inttarget){//方法一:暴力解法//for(inti=0;inums[nums.length-1]){return-1;}intleft=0;intright=nums.length-1;//右闭区间intmid=(left+right)>>1;while(left>1;}return-1;}//publicintbinarySearch(int[]nums,inttarget,intstart,intend){//intmid=(start+e

Leetcode刷题第五周

二叉树:种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树存储方式:链式存储、线式存储(顺序存储)二叉数遍历:深度优先搜索(前序、中序、后序):使用递归实现(实际用栈来实现)、迭代法(非递归的方式、栈),广度优先搜索(层序遍历):用队列递归三步走写法:1、确定递归函数的参数和返回值。2、确定终止条件。3、确定单层递归的逻辑。144、二叉树的前序遍历/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){t

Leetcode刷题第五周

二叉树:种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树存储方式:链式存储、线式存储(顺序存储)二叉数遍历:深度优先搜索(前序、中序、后序):使用递归实现(实际用栈来实现)、迭代法(非递归的方式、栈),广度优先搜索(层序遍历):用队列递归三步走写法:1、确定递归函数的参数和返回值。2、确定终止条件。3、确定单层递归的逻辑。144、二叉树的前序遍历/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){t

Leetcode刷题第六周

回溯算法回溯的本质是穷举,所以不是高效的算法回溯法,一般可以解决如下几种问题:组合问题:N个数里面按一定规则找出k个数的集合注意区分一个集合取组合和多个集合取组合的细节。切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等需要注意问题是有一个解还是多个解,一个解的需要返回值,一旦找到解就逐级返回,多个解的不需要返回值因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。从图中看出for循环可以理解是横向遍历,bac

Leetcode刷题第六周

回溯算法回溯的本质是穷举,所以不是高效的算法回溯法,一般可以解决如下几种问题:组合问题:N个数里面按一定规则找出k个数的集合注意区分一个集合取组合和多个集合取组合的细节。切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等需要注意问题是有一个解还是多个解,一个解的需要返回值,一旦找到解就逐级返回,多个解的不需要返回值因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。从图中看出for循环可以理解是横向遍历,bac

LeetCode刷题第七周

贪心算法刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。455、分发饼干classSolution{publicintcount;publicintfindContentChildren(int[]g,int[]s){Arrays.sort(g);Arrays.sort(s);count=0;intindexS=0;intindexG=0;while(indexS=g[indexG]){count++;indexG++;indexS++;}else{indexS++;}}returncount;}}376、摆动序列classSolution{pu

LeetCode刷题第七周

贪心算法刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。455、分发饼干classSolution{publicintcount;publicintfindContentChildren(int[]g,int[]s){Arrays.sort(g);Arrays.sort(s);count=0;intindexS=0;intindexG=0;while(indexS=g[indexG]){count++;indexG++;indexS++;}else{indexS++;}}returncount;}}376、摆动序列classSolution{pu

LeetCode 887. 鸡蛋掉落-题解分析

题目来源887.鸡蛋掉落题目详情给你k枚相同的鸡蛋,并可以使用一栋从第1层到第n层共有n层楼的建筑。已知存在楼层f,满足 0,任何从高于f的楼层落下的鸡蛋都会碎,从f楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层x扔下(满足 1)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中重复使用这枚鸡蛋。请你计算并返回要确定f确切的值的最小操作次数是多少?示例1:输入:k=1,n=2输出:2解释:鸡蛋从1楼掉落。如果它碎了,肯定能得出f=0。否则,鸡蛋从2楼掉落。如果它碎了,肯定能得出f=1。如果它没碎,那么肯定能得出f=2。

LeetCode 887. 鸡蛋掉落-题解分析

题目来源887.鸡蛋掉落题目详情给你k枚相同的鸡蛋,并可以使用一栋从第1层到第n层共有n层楼的建筑。已知存在楼层f,满足 0,任何从高于f的楼层落下的鸡蛋都会碎,从f楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层x扔下(满足 1)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中重复使用这枚鸡蛋。请你计算并返回要确定f确切的值的最小操作次数是多少?示例1:输入:k=1,n=2输出:2解释:鸡蛋从1楼掉落。如果它碎了,肯定能得出f=0。否则,鸡蛋从2楼掉落。如果它碎了,肯定能得出f=1。如果它没碎,那么肯定能得出f=2。

LeetCode刷题第八九十周

动态规划如果某一问题有很多重叠子问题,使用动态规划是最有效的解题步骤:背包问题:01背包,完全背包,多重背包01背包:统一使用一维数组来进行遍历publicstaticvoidmain(String[]args){int[]weight={1,3,4};int[]value={15,20,30};intbagWight=4;testWeightBagProblem(weight,value,bagWight);}publicstaticvoidtestWeightBagProblem(int[]weight,int[]value,intbagWeight){intwLen=weight.len